#ifndef __MYSPI_H
#define __MYSPI_H

/*
 *SPI模式选择:
 *
*CPOL(时钟极性):
 *		0-空闲状态时,SCK=0
 *		1-空闲状态时,SCK=1
 *CPHA(时钟相位):
 *		0-SCK第一个边沿移入数据,第二个边沿移出数据
 *		1-SCK第一个边沿移出数据,第二个边沿移入数据
 *
 *模式0:CPOL=0,CPHA=0
 *模式1:CPOL=0,CPHA=1
 *模式2:CPOL=1,CPHA=0
 *模式3:CPOL=1,CPHA=1
 */

typedef struct
{
	uint8_t MySPI_Mode;//软件SPI模式
	
	uint32_t MySPI_SCK_RCC;//SCL引脚时钟
	GPIO_TypeDef *MySPI_SCK_GPIOx;//SCL引脚的GPIO
	uint32_t MySPI_SCK_Pin;//SCL引脚的Pin号
	
	uint32_t MySPI_MOSI_RCC;//SDA引脚时钟
	GPIO_TypeDef *MySPI_MOSI_GPIOx;//SDA引脚的GPIO
	uint32_t MySPI_MOSI_Pin;//SDA引脚的Pin号
	
	uint32_t MySPI_MISO_RCC;//SDA引脚时钟
	GPIO_TypeDef *MySPI_MISO_GPIOx;//SDA引脚的GPIO
	uint32_t MySPI_MISO_Pin;//SDA引脚的Pin号

	uint32_t MySPI_SS_RCC;//SDA引脚时钟
	GPIO_TypeDef *MySPI_SS_GPIOx;//SDA引脚的GPIO
	uint32_t MySPI_SS_Pin;//SDA引脚的Pin号
}MySPI_InitTypedef;//软件SPI配置结构体


void MySPI_Init(MySPI_InitTypedef *MySPI_InitStructure);//软件SPI初始化
void MySPI_Start(MySPI_InitTypedef *MySPI_InitStructure);//软件SPI数据交换开始
void MySPI_Stop(MySPI_InitTypedef *MySPI_InitStructure);//软件SPI数据交换结束
uint8_t MySPI_Swap8bits(MySPI_InitTypedef *MySPI_InitStructure,uint8_t DRByte);//软件SPI交换一次8bits数据
uint8_t MySPI_SwapByte(MySPI_InitTypedef *MySPI_InitStructure,uint8_t Address,uint8_t DRByte);//软件SPI交换一个字节数据
void MySPI_SwapData(MySPI_InitTypedef *MySPI_InitStructure,uint8_t Address,uint8_t *SendData,uint16_t Length,uint8_t *ReceiveData);//软件SPI交换数据



/*旧的MySPI.c,只能用于可配置引脚*/
//void MySPI_Init(void);//软件SPI初始化
//void MySPI_Start(void);//软件SPI数据交换开始
//void MySPI_Stop(void);//软件SPI数据交换结束
//uint8_t MySPI_Swap8bits(uint8_t SendByte);//软件SPI交换一次8bits数据
//uint8_t MySPI_SwapByte(uint8_t Address,uint8_t SendByte);//软件SPI交换一个字节数据
//void MySPI_SwapData(uint8_t Address,uint8_t *SendData,uint16_t Length,uint8_t *ReceiveData);//软件SPI交换数据

#endif
